Пульт.Онлайн /

Шаблоны уведомлений

Формат уведомлений

Уведомление в Пульт.Онлайн имеет текстовый формат и отправляются при изменении триггерной переменной. В качестве триггерной переменной может выступать тревожная и виртуальная переменные.

Уведомление может состоять из блоков, #директив и %подстановок%. Директивы позволяют ограничить круг получателей и выбрать по значениям переменных и других проектных данных требуемый блок для рассылки. Простейшее уведомление представляет собой произвольную строку текста и рассылается всем пользователям проекта, имеющим доступ к триггерной переменной при любом изменении триггерной переменной.

Если текст уведомления начинается с директивы #template, в качестве текста будет использован текст из шаблона уведомления (Редактор / Уведомления), указанного в значении директивы #template, например, тревожные переменные по умолчанию настроены на шаблон default_alarm.ntf:

#template default_alarm.ntf

Уведомление может состоять из нескольких блоков, включать #директивы и %подстановки%. Директивы и подстановки опциональны. Простая строка текста является валидным уведомлением и представляет собой один блок. Общий формат уведомления следующий:

#директива1_блока_1 значение_директивы_1
#директива2_блока_1 значение_директивы_2
#директиваN_блока_1 значение_директивы_N
Текст блока 1 с %подстановками%

#директива1_блока_2 значение_директивы_1
#директива2_блока_2 значение_директивы_2
#директиваN_блока_2 значение_директивы_N
Текст блока 2 с %подстановками%

...

#директива1_блока_3 значение_директивы_1
#директива2_блока_3 значение_директивы_2
#директиваN_блока_N значение_директивы_N
Текст блока N с %подстановками%

Общие правила:

  • Новый блок начинается с #директивы.
  • Первая строка без директивы - текст данного блока.
  • Рассылается только текст блока, директивы не рассылаются, но значения некоторых директив могут являться частью отправляемого сообщения, например #cmd (значение данной директивы содержит команду командной строки).
  • Директивы и текст могут включать %подстановки% для включения в соответствующие места текста требуемых значений переменных или проектных данных, например, параметров узла.
  • Текст может быть многострочным.

Рассылка уведомлений

Рассылка выполняется по следующему алгоритму:

  1. Срабатывает переменная-триггер (виртуальная или тревожная переменная)
  2. Определяется уведомление для рассылки (шаблон, указанный в директиве #template или прямой текст).
  3. Выполняется подготовка к рассылке уведомления в канал Командная строка
    • Выполняется проход по блокам уведомления до первого блока, успешно прошедшего директиву #if или не имеющего директивы #if, а также имеющего директиву #cmd с командой командной строки.
    • Если блок найден, директива #cmd заполняются подстановками и выполняется отправка значения данной директивы в качестве команды командной строки. Для канала Командная строка текст блока игнорируется и не отправляется.
  4. Выполняется проход по всем пользователям системы
    • Отсеиваются пользователи, не имеющие доступ к переменной-триггеру
    • У оставшихся пользователей выполняется проверка включенных каналов рассылки (interface, cmd, telegram, email, sms)
    • По каждому пользователю для каждого активного канала рассылки выполняется рассылка первого блока, прошедшего директиву #if.

При этом, директива #if может использоваться для создания блоков разного формата для разных каналов. Например, в канал telegram отправляется сообщение в формате Markdown, а в канал interface сообщение в формате HTML. Пример уведомления с директивами #if для разделения каналов:

#if channel_telegram
#telegram_parse_mode MarkdownV2
**Авария %var__desc%**: %var__alarm_action_name%

#if channel_interface
<b>Авария %var__desc%</b>: %var__alarm_action_name

Здесь #if channel_telegram и #if channel_interface сработают каждый на соответствующем канале рассылки. Директива #telegram_parse_mode MarkdownV2 включает поддержку форматирования Markdown в telegram-сообщении (вывод **Авария %var__desc%** жирным шрифтом).

Каналы

Сообщения отправляются пользователям в один или несколько каналов, в зависимости от настроек профиля конкретного пользователя, где можно указать, по каким каналам и какой тип сообщений принимать.

interface - Сообщения по данному каналу доставляются в Интерфейс пользователя в панель уведомлений
telegram - Сообщения отправляются пользователю по Telegram
email, - Сообщения отправляются пользователю по Email
sms - Сообщения отправляются пользователю по SMS

cmd - Сообщения из директивы #cmd в виде команд отправляются в командную строку сервера (не относится к пользователям).

Директивы

#if <логическое_выражение> - директива используется для определения блока для рассылки. Рассылается только первый блок, успешно прошедший директиву #if, если она представлена в блоке. Если директива #if не представлена, считается, что блок прошел #if и рассылается. Остальные блоки игнорируются. Пример выражения: %user_login_ivanov% & %P1_N1_var1__value%>100

#cmd <команда_командной_строки> - данная директива применяется только к каналу рассылки "Командная строка". Значение директивы будет отправлено сервису exec для выполнения в качестве команды командной строки.

#interface_header <заголовок_сообщения> - директива устанавливает произвольный заголовок сообщению, которое отображается в Интерфейсе, в панели уведомлений. Данная директива распространяется только на уведомления, отправляемые в Интерфейс.

#telegram_bot <имя_бота> - директива позволяет направить уведомление в определенный бот, указанный в настройках сервиса chnl_telegram (при наличии нескольких ботов). Если директива не указана, уведомление будет отправлено через первый доступный бот. Директива распространяется только на уведомления, рассылаемые в Telegram.

#telegram_parse_mode <MarkdownV2|HTML|Markdown> - директива устанавливает опцию parse_mode при отправке уведомлений через Telegram. Данная опция позволяет применять один из вариантов форматирования к тексту уведомления (MarkdownV2, HTML или Markdown - подробнее см. API Telegram). Директива распространяется только на уведомления, рассылаемые в Telegram.

#telegram_disable_web_page_preview <1|0> - если 1, директива отключает показ превью веб-страниц по ссылкам в тексте уведомления. Директива распространяется только на уведомления, рассылаемые в Telegram.

Общие подстановки

%message% - определено только у сообщений от пользователей и содержит текст сообщения
%sender% - имя отправителя, определено только у сообщений от пользователей
%type% - код типа сообщения
%type_name% - имя типа сообщения
%user_login_<логин>% - 1 если блок рассылается пользователю с указанным логином, может использоваться в #if для таргетирования по логину пользователя %user_group_<имя_группы>% - 1 если пользователь в указанной группе, может использоваться в #if для таргетирования по группам
%user_admin% - 1 если пользователь администратор системы
%user_demo% - 1 если демо-пользователь
%user_anonymous% - 1 если анонимный пользователь
%user_login% - логин пользователя
%user_name% - имя пользователя
%channel_interface% - текущий канал "Интерфейс"
%channel_cmd% - текущий канал "Командная строка"
%channel_telegram% - текущий канал "Telegram"
%channel_sms% - текущий канал "SMS"
%channel_email% - текущий канал "Email"

Подстановки свойств переменной-триггера

%var__project_name% - проектное имя переменной (напр. N1_var1)
%var__local_name% - локальное имя переменной (напр. var1)
%var__name% - глобальное имя переменной (напр. P1_N1_var1)
%var__desc% - описание переменной
%var__comment% - комментарий переменной
%var__time% - время последнего изменения (timestamp_ms)
%var__value% - последнее значение
%var__error% - код последней ошибки
%var__time_str% - время последнего изменения в виде строки даты и времени
%var__node_path% - полный путь узла переменной
%var__node_pseudo_path% - псевдо-путь (сокращенный)
%var__node_prefix% - префикс узла (напр. P1_N1)
%var__node_project_url% - URL проекта
%var__node_project_name% - имя проекта
%var__node_project_html_link% - HTML-код ссылки на проект
%var__node_project_md_link% - Markdown-код ссылки на проект
%var__node_project_alarms_html_link% - HTML-код ссылки на окно тревог проекта
%var__node_project_alarms_md_link% - Markdown-код ссылки на окно тревог проекта
%var__node_param_<имя_параметра>% - текстовое значение указанного параметра узла (напр. %var__node_param_slave_id%)
%var__node_url% - URL узла
%var__node_html_link% - HTML-код ссылки на узел
%var__node_md_link% - Markdown-код ссылки на узел
%var__alarm_active% - 1, если тревога активная
%var__alarm_unack% - 1, если тревога неквитированная
%var__alarm_repeated% - 1, если тревога повторная (до первого квитирования)
%var__alarm_class% - код класса тревоги (3 - авария, 2 - неисправность, 1 - предупреждение, 0 - оповещение)
%var__alarm_class_name% - имя класса тревоги
%var__alarm_action% - код события тревоги (1 - активация, 2 - нормализация, 3 - квитирование, 4 - отмена квитирования, 5 - блокировка, 6 - разблокировка)
%var__alarm_action_name% - имя события тревоги
%var__alarm_action_act% - 1, если активация тревоги
%var__alarm_action_norm% - 1, если нормализация тревоги
%var__alarm_action_ack% - 1, если квитирование тревоги
%var__alarm_action_unack% - 1, если отмена квитирования тревоги
%var__alarm_action_shlv% - 1, если блокировка тревоги
%var__alarm_action_unshlv% - 1, если разблокировка тревоги
%var__alarm_simple_link_text% - текст ссылки на тревогу
%var__alarm_simple_link_url% - URL ссылки на тревогу
%var__alarm_html_links% - HTML-код ссылок на тревогу на экранах или в узле
%var__alarm_md_links% - Markdown-код ссылок на тревогу на экранах или в узле
%var__alarm_html_link% - HTML-код ссылки на окно тревоги
%var__alarm_md_link% - Markdown-код ссылки на окно тревоги
%var__payload_<имя_поля>% - значение поля payload

Подстановки свойств любых переменных сервера

Подстановка свойств, аналогичных свойствам переменной-триггера, доступны для любых переменных, а не только для триггерной переменной. Для вывода свойств произвольной переменной вместо %var__...% укажите имя переменной (глобальное, проектное или локальное относительно триггерной), например:

Узел: %N1_var1__node_pseudo_path%
Уставка: %P1_N3_setpoint__value% °C

Отладка

Все текущие доступные подстановки можно вывести, вставив в текст уведомления подстановку %debug%. Пример уведомления с %debug%:

#if user_login_admin
Тестовое уведомление
%debug%

Такое уведомление будет разослано только пользователю admin (#if user_login_admin) и будет содержать полный список подстановок. Пример полученного сообщения:

Тестовое уведомление
>>>>>>>> DEBUG INFO <<<<<<<<

var__node_prefix: P1_N1
var__global_name: P1_N1_alarm_filter
var__project_name: N1_alarm_filter
var__local_name: alarm_filter
var__name: alarm_filter
var__desc: Фильтр загрязнен
var__comment: 
var__time: 1747591489133
var__value: 0
var__error: 0
var__time_str: 18.05.25 21:04:49
var__node_path: /projects/Проект1.project/nodes/Узел1.node
var__node_pseudo_path: Узел1
var__node_prefix: P1_N1
var__node_project_url: http://172.22.204.56/projects/Проект1.project
var__node_project_name: Проект1
var__node_project_html_link: Проект1
var__node_project_md_link: [Проект1](http://172.22.204.56#interface/project?path=/projects/Проект1.project)
var__node_project_alarms_html_link: Проект1
var__node_project_alarms_md_link: [Проект1](http://172.22.204.56#interface/alarms?path=/projects/Проект1.project/alarms)
var__node_param_param1: параметр 1
var__node_param_param2: параметр 2
var__node_param_param3: параметр 3
var__node_url: http://172.22.204.56#interface/screen?path=/projects/Проект1.project/nodes/Узел1.node
var__node_html_link: Узел1
var__node_md_link: [Узел1](http://172.22.204.56#interface/screen?path=/projects/Проект1.project/nodes/Узел1.node)
var__alarm_active: 0
var__alarm_unack: 0
var__alarm_repeated: 0
var__alarm_class: 3
var__alarm_class_name: Авария
var__alarm_action: 3
var__alarm_action_name: Квитирование
var__alarm_action_act: 
var__alarm_action_norm: 
var__alarm_action_ack: 1
var__alarm_action_unack: 
var__alarm_action_shlv: 
var__alarm_action_unshlv: 
var__alarm_simple_link_text: Экран1
var__alarm_simple_link_url: http://172.22.204.56#interface/screen?path=/projects/Проект1.project/screens/Экран1.screen
var__alarm_html_links: Узел1 Экран1
var__alarm_md_links: [Узел1](http://172.22.204.56#interface/screen?path=/projects/Проект1.project/nodes/Узел1.node)
[Экран1](http://172.22.204.56#interface/screen?path=/projects/Проект1.project/screens/Экран1.screen)
var__alarm_html_link: Фильтр загрязнен
var__alarm_md_link: [Фильтр загрязнен](http://172.22.204.56#interface/alarms?path=/projects/Проект1.project/alarms&alarm=P1_N1_alarm_filter)
var__payload_ac: 3
var__payload_ak: 1
var__payload_us: admin
var__payload_ip: 127.0.0.1
var__payload_tm: 1747591489133
var__payload_cl: 3
var__payload_au: admin
var__payload_cn: 1

type: 115
type_name: Авария: Квитирование
channel_cmd: 0
channel_sms: 0
channel_telegram: 0
channel_email: 0
channel_interface: 1
user_login_admin: 1
user_group_Группа1: 1
user_admin: 1
user_demo: 0
user_anonymous: 0
user_login: admin
user_name: 
  Email
  SMS
   fdb_list
   fdb_load
   fdb_move
   fdb_paths
   node_list
   subscribe
   var_get
   var_list
   var_set